feat: execution arbiter default-on for debug/review (v3.12.0) - #13
Merged
Merged
Conversation
One character of behaviour change: `${SYNOD_EXEC_ARBITER:-0}` becomes
`${SYNOD_EXEC_ARBITER:-1}` in synod-phase2-critic.md. Everything else in this
commit is documentation catching up.
Why the flag was redundant: the gate already required MODE to be debug or
review, a TARGET_PATH, and a Phase 0.5 probe that collected >= 1 test. Those
three conditions select exactly the situations where execution can settle
something — so the opt-in flag was suppressing a signal the pipeline had
already qualified, and the default path kept settling code disputes by
argument. Execution-grounded selection is how SWE-bench SOTA picks among
candidates (CWM arXiv:2510.02387), and it is the strongest mechanical signal
available, which is where 3.8-3.10 moved everything else.
Kept the `== "1"` form rather than `!= "0"`. This step executes code, so an
unrecognised value should fail toward NOT running:
(unset) -> RUN '1' -> RUN '0' -> skip 'true' -> skip 'flase' -> skip
verified against bash directly, not assumed.
Known limitation, documented rather than pre-solved: the arbiter runs the
target suite with no green baseline, so a PRE-EXISTING failing test is reported
as machine-verified evidence. Recorded under Unreleased/Planned to be fixed if
false signals actually show up in use — building it speculatively was the
over-engineering the owner pushed back on. Same for scoping the run to the
disputed tests. Bounds unchanged: pytest -x -q, 120s hard timeout, timeout =
UNSETTLED, never blocks the pipeline.
Version 3.12.0 in all four declarations. Docs updated in lockstep: SKILL.md
flag table, Phase 2 module heading and guard note, both READMEs' research-basis
rows, and the marketplace copy that still called the arbiter opt-in.
975 passed / 14 skipped; version-consistency guard green; ruff clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The change
One character. Everything else is documentation catching up.
Why the flag was redundant
The gate already required all three of:
MODEisdebugorreviewTARGET_PATHwas givenexec_arbiter.py:57-62)Those conditions select exactly the situations where execution can settle
something. The opt-in flag on top was suppressing a signal the pipeline had
already qualified — so the default path kept settling code disputes by argument
even when a runnable suite was sitting right there.
Execution-grounded selection is how SWE-bench SOTA picks among candidates
(CWM, arXiv:2510.02387), and it is the
strongest mechanical signal available — the direction 3.8–3.10 moved every other
decision signal.
== "1", not!= "0"This step executes code, so an unrecognised value must fail toward not
running. Verified against bash rather than assumed:
SYNOD_EXEC_ARBITER10trueflase(typo)This also matches the repo's dominant idiom (
SYNOD_ANONYMIZE:-1==1,SYNOD_V2_AUTO_CLASSIFY:-1==1).What this means in practice
In debug/review mode against a repo with a collectable pytest suite, Synod now
runs that suite. pytest imports
conftest.pyand every test module duringcollection, so set
SYNOD_EXEC_ARBITER=0for targets whose suite has real sideeffects (live services, shared databases, outbound mail).
Bounds are unchanged:
pytest -x -q, 120s hard timeout, timeout treated asUNSETTLED rather than failing, and the arbiter never blocks the pipeline.
Known limitation — documented, not pre-solved
The arbiter runs the target suite with no green baseline, so a pre-existing
failing test is reported as machine-verified evidence (
-xstops at the firstfailure, which on a red repo is likely unrelated to the dispute). Recorded under
Unreleased → Plannedto be fixed if false signals actually show up in use —building it speculatively, along with scoping the run to the disputed tests, was
over-engineering the owner correctly pushed back on.
Verification
975 passed / 14 skipped;tests/test_version_consistency.pygreenruff check+ruff format --checkcleanSKILL.mdflag table, Phase 2 module heading + guard note, both READMEs' research-basis rows, marketplace copy that still said "opt-in"🤖 Generated with Claude Code